<?php
/**
 * Size
 *
 * Обработка данных размеров
 *
 * @author Mike
 */
class Size extends ActiveRecord {
	protected $tableName = 'size';
	public $pkName = 'ID_size';
	
	public static $arrMansShoesSizes = array (
		39 => array(6.5, 6, 38, 24,5),
		40 => array(7, 6, 39, 25),
		41 => array(8, 7, 40, 26),
		42 => array(8.5, 7.5, 41, 26.5),
		43 => array(9.5, 8.5, 42, 27.5),
		44 => array(10, 9, 43, 28),
		45 => array(11, 10, 44, 29),
		46 => array(12, 11, 45, 30),
		47 => array(12.5, 11.5, 46, 30.5)
	);
	
	protected $arrSettings = array('created_at' => true, 'author' => true, 'updated_at' => true);

	public $validatesLengthOf = array(
			'size_name' => array('min' => 2, 'max' => 128, 'message' => 'Название - 2-128 символов')
	);
	
	public function beforeValidation() {
		if(!array_key_exists($this->getField('type'), Product::$availableSizeTypes)) $this->errorValidated('', 'Недопустимый тип размера');
	}
	
	public function afterValidation() {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `size`.`type`
				FROM `size`
				INNER JOIN `product_active` USING(`ID_size`)
				WHERE `size`.`ID_size` ='" . $this->getField('ID_size') . "
				LIMIT 1'";
		$arrSize = $objDB->selectOneRow($stmt);
		// Если к текущему размеру привязаны товары и у него пытаются измиенить тип размера
		if(!empty($arrSize) && $arrSize['type'] != $this->getField('type')) $this->errorValidated('', 'Нельзя сменить тип размера - к нему привязаны товары');
	}
	
	/**
	 * Получает все размеры для заданного типа размеров
	 * 
	 * @param string $type - тип размера
	 */
	public static function getSizesByType($type) {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `size`.`ID_size`, `size`.`size_name`
				FROM `size`
				WHERE `size`.`type`='" . intval($type) . "'";
		$arrSizes = $objDB->select($stmt);

		foreach($arrSizes as &$arrSize) {
			$arrSize['size_name'] = self::getShoesSizeName($arrSize['size_name']);
		}
		$arrSizes = Service_ArrayConverter::makeKeySimpleArrayFromMultyArray($arrSizes, 'ID_size', 'size_name');
		return $arrSizes;
	}
	
	/**
	 * Возвращает имя размера обуви по его европейскому значению
	 * 
 	 * @param int $size
	 * @return string - строка вида 41EUR (23см)
	 */
	public static function getShoesSizeName($size) {
		return $size . 'EUR (' . self::$arrMansShoesSizes[$size][3] . 'см)';
	}
}